{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 1. 数据预览"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "import warnings\n",
    "warnings.filterwarnings(\"ignore\")\n",
    "%matplotlib inline\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "user_data = pd.read_csv(\"./input/tianchi_fresh_comp_train_user.csv\")\n",
    "item_data = pd.read_csv(\"./input/tianchi_fresh_comp_train_item.csv\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>user_id</th>\n",
       "      <th>item_id</th>\n",
       "      <th>behavior_type</th>\n",
       "      <th>user_geohash</th>\n",
       "      <th>item_category</th>\n",
       "      <th>time</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>10001082</td>\n",
       "      <td>285259775</td>\n",
       "      <td>1</td>\n",
       "      <td>97lk14c</td>\n",
       "      <td>4076</td>\n",
       "      <td>2014-12-08 18</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>10001082</td>\n",
       "      <td>4368907</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>5503</td>\n",
       "      <td>2014-12-12 12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>10001082</td>\n",
       "      <td>4368907</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>5503</td>\n",
       "      <td>2014-12-12 12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>10001082</td>\n",
       "      <td>53616768</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>9762</td>\n",
       "      <td>2014-12-02 15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>10001082</td>\n",
       "      <td>151466952</td>\n",
       "      <td>1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>5232</td>\n",
       "      <td>2014-12-12 11</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    user_id    item_id  behavior_type user_geohash  item_category  \\\n",
       "0  10001082  285259775              1      97lk14c           4076   \n",
       "1  10001082    4368907              1          NaN           5503   \n",
       "2  10001082    4368907              1          NaN           5503   \n",
       "3  10001082   53616768              1          NaN           9762   \n",
       "4  10001082  151466952              1          NaN           5232   \n",
       "\n",
       "            time  \n",
       "0  2014-12-08 18  \n",
       "1  2014-12-12 12  \n",
       "2  2014-12-12 12  \n",
       "3  2014-12-02 15  \n",
       "4  2014-12-12 11  "
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "user_data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>item_id</th>\n",
       "      <th>item_geohash</th>\n",
       "      <th>item_category</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>100002303</td>\n",
       "      <td>NaN</td>\n",
       "      <td>3368</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>100003592</td>\n",
       "      <td>NaN</td>\n",
       "      <td>7995</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>100006838</td>\n",
       "      <td>NaN</td>\n",
       "      <td>12630</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>100008089</td>\n",
       "      <td>NaN</td>\n",
       "      <td>7791</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>100012750</td>\n",
       "      <td>NaN</td>\n",
       "      <td>9614</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     item_id item_geohash  item_category\n",
       "0  100002303          NaN           3368\n",
       "1  100003592          NaN           7995\n",
       "2  100006838          NaN          12630\n",
       "3  100008089          NaN           7791\n",
       "4  100012750          NaN           9614"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "item_data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "            user_id       item_id  behavior_type  item_category\n",
      "count  2.329103e+07  2.329103e+07   2.329103e+07   2.329103e+07\n",
      "mean   7.006868e+07  2.023214e+08   1.106268e+00   6.835397e+03\n",
      "std    4.569072e+07  1.167440e+08   4.599087e-01   3.812873e+03\n",
      "min    4.920000e+02  3.700000e+01   1.000000e+00   2.000000e+00\n",
      "25%    3.019541e+07  1.014417e+08   1.000000e+00   3.690000e+03\n",
      "50%    5.626942e+07  2.022430e+08   1.000000e+00   6.054000e+03\n",
      "75%    1.166482e+08  3.035325e+08   1.000000e+00   1.027100e+04\n",
      "max    1.424430e+08  4.045625e+08   4.000000e+00   1.408000e+04\n",
      "            item_id  item_category\n",
      "count  6.209180e+05  620918.000000\n",
      "mean   2.004351e+08    6970.213167\n",
      "std    1.191648e+08    3479.627372\n",
      "min    9.580000e+02       2.000000\n",
      "25%    9.357641e+07    4245.000000\n",
      "50%    2.053761e+08    6890.000000\n",
      "75%    3.054015e+08   10120.000000\n",
      "max    4.045624e+08   14071.000000\n"
     ]
    }
   ],
   "source": [
    "print(user_data.describe())\n",
    "print(item_data.describe())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "                  Total   Percent\n",
      "user_geohash   15911010  0.683139\n",
      "time                  0  0.000000\n",
      "item_category         0  0.000000\n",
      "behavior_type         0  0.000000\n",
      "item_id               0  0.000000\n",
      "user_id               0  0.000000\n",
      "                Total   Percent\n",
      "item_geohash   417508  0.672404\n",
      "item_category       0  0.000000\n",
      "item_id             0  0.000000\n"
     ]
    }
   ],
   "source": [
    "total = user_data.isnull().sum().sort_values(ascending=False)\n",
    "percent = (user_data.isnull().sum()/user_data.isnull().count()).sort_values(ascending=False)\n",
    "missing_data = pd.concat([total, percent], axis=1, keys=['Total', 'Percent'])#.reset_index('user_data')\n",
    "print(missing_data.head(20))\n",
    "\n",
    "total = item_data.isnull().sum().sort_values(ascending=False)\n",
    "percent = (item_data.isnull().sum()/item_data.isnull().count()).sort_values(ascending=False)\n",
    "missing_data = pd.concat([total, percent], axis=1, keys=['Total', 'Percent'])#.reset_index('item_data')\n",
    "print(missing_data.head(20))\n",
    "## 数据中除了商品位置信息（item_geohash）有67.2%的缺失值，其他字段都无缺失值。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "item_data 商品ID个数： 422858\n",
      "user_data商品ID个数： 4758484\n"
     ]
    }
   ],
   "source": [
    "print('item_data 商品ID个数：',len(item_data.item_id.unique()))\n",
    "print('user_data商品ID个数：',len(user_data.item_id.unique()))\n",
    "item_list=item_data.item_id.unique().tolist()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "查看用户的行为类型， 包括浏览、收藏、加购物车、购买  占比"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.942015996117303\n",
      "0.01968530627696237\n",
      "0.02831292067971069\n",
      "0.009985776926023916\n"
     ]
    }
   ],
   "source": [
    "print(len(user_data[user_data[\"behavior_type\"] == 1])/len(user_data)) # 浏览\n",
    "print(len(user_data[user_data[\"behavior_type\"] == 2])/len(user_data)) # 收藏\n",
    "print(len(user_data[user_data[\"behavior_type\"] == 3])/len(user_data)) # 加购物车\n",
    "print(len(user_data[user_data[\"behavior_type\"] == 4])/len(user_data)) # 购买"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "    user_id    item_id  behavior_type user_geohash  item_category  \\\n",
      "0  10001082  285259775              1      97lk14c           4076   \n",
      "1  10001082    4368907              1          NaN           5503   \n",
      "2  10001082    4368907              1          NaN           5503   \n",
      "3  10001082   53616768              1          NaN           9762   \n",
      "4  10001082  151466952              1          NaN           5232   \n",
      "\n",
      "                 time        date  weekday  hour  \n",
      "0 2014-12-08 18:00:00  2014-12-08        0    18  \n",
      "1 2014-12-12 12:00:00  2014-12-12        4    12  \n",
      "2 2014-12-12 12:00:00  2014-12-12        4    12  \n",
      "3 2014-12-02 15:00:00  2014-12-02        1    15  \n",
      "4 2014-12-12 11:00:00  2014-12-12        4    11  \n"
     ]
    }
   ],
   "source": [
    "# 转换时间类型\n",
    "user_data[\"time\"] = pd.to_datetime(user_data[\"time\"], format=\"%Y%m%d %H\")\n",
    "#print(user_data.time) # 2014-12-08 18:00:00\n",
    "user_data[\"date\"] = user_data[\"time\"].dt.date\n",
    "user_data[\"weekday\"] = user_data[\"time\"].dt.weekday\n",
    "user_data[\"hour\"] = user_data[\"time\"].dt.hour\n",
    "print(user_data.head())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "查user_data日期分布，从2014-11-18 00:00:00 -  2014-12-18 23:00:00"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "20550175   2014-11-18 00:00:00\n",
      "3493635    2014-11-18 01:00:00\n",
      "8302965    2014-11-18 02:00:00\n",
      "13013089   2014-11-18 03:00:00\n",
      "14682229   2014-11-18 04:00:00\n",
      "2821132    2014-11-18 05:00:00\n",
      "5092808    2014-11-18 06:00:00\n",
      "15471053   2014-11-18 07:00:00\n",
      "12603115   2014-11-18 08:00:00\n",
      "19452032   2014-11-18 09:00:00\n",
      "15019872   2014-11-18 10:00:00\n",
      "19051855   2014-11-18 11:00:00\n",
      "5904469    2014-11-18 12:00:00\n",
      "15946541   2014-11-18 13:00:00\n",
      "21836301   2014-11-18 14:00:00\n",
      "19475970   2014-11-18 15:00:00\n",
      "6041580    2014-11-18 16:00:00\n",
      "3283250    2014-11-18 17:00:00\n",
      "21763730   2014-11-18 18:00:00\n",
      "20014303   2014-11-18 19:00:00\n",
      "20135495   2014-11-18 20:00:00\n",
      "627662     2014-11-18 21:00:00\n",
      "15586223   2014-11-18 22:00:00\n",
      "22172522   2014-11-18 23:00:00\n",
      "19490747   2014-11-19 00:00:00\n",
      "13248939   2014-11-19 01:00:00\n",
      "23284362   2014-11-19 02:00:00\n",
      "8735613    2014-11-19 03:00:00\n",
      "2797551    2014-11-19 04:00:00\n",
      "20741381   2014-11-19 05:00:00\n",
      "                   ...        \n",
      "19363854   2014-12-17 18:00:00\n",
      "16487489   2014-12-17 19:00:00\n",
      "10995570   2014-12-17 20:00:00\n",
      "18188203   2014-12-17 21:00:00\n",
      "19699309   2014-12-17 22:00:00\n",
      "17263757   2014-12-17 23:00:00\n",
      "22399519   2014-12-18 00:00:00\n",
      "7083935    2014-12-18 01:00:00\n",
      "4652491    2014-12-18 02:00:00\n",
      "20178490   2014-12-18 03:00:00\n",
      "3904831    2014-12-18 04:00:00\n",
      "21728820   2014-12-18 05:00:00\n",
      "15530411   2014-12-18 06:00:00\n",
      "987228     2014-12-18 07:00:00\n",
      "902606     2014-12-18 08:00:00\n",
      "10793243   2014-12-18 09:00:00\n",
      "6392930    2014-12-18 10:00:00\n",
      "126802     2014-12-18 11:00:00\n",
      "10183414   2014-12-18 12:00:00\n",
      "23150767   2014-12-18 13:00:00\n",
      "2692700    2014-12-18 14:00:00\n",
      "16087654   2014-12-18 15:00:00\n",
      "7770918    2014-12-18 16:00:00\n",
      "13661306   2014-12-18 17:00:00\n",
      "19843132   2014-12-18 18:00:00\n",
      "8527242    2014-12-18 19:00:00\n",
      "21381422   2014-12-18 20:00:00\n",
      "6270703    2014-12-18 21:00:00\n",
      "3013990    2014-12-18 22:00:00\n",
      "20799248   2014-12-18 23:00:00\n",
      "Name: time, Length: 744, dtype: datetime64[ns]\n"
     ]
    }
   ],
   "source": [
    "print(user_data.sort_values('time')['time'].drop_duplicates())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 2.用户行为数据探索"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2.1 查看单日用户购买数量"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 商品每天的购买情况 in_itemlist表示是否特指待预测商品子集的商品\n",
    "#plt.rcParams['font.sans-serif'] = ['SimHei']  # 中文字体设置-黑体\n",
    "# plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像是负号'-'显示为方块的问题\n",
    "#sns.set(font='SimHei')  # 解决Seaborn中文显示问题\n",
    "\n",
    "def erveryday_buy_counts(in_itemlist=False):\n",
    "    if in_itemlist == True:\n",
    "        condition = user_data[\"item_id\"].isin(item_list)\n",
    "    else:\n",
    "        condition = True\n",
    "    #f, (ax1, ax2,ax3,ax4) = plt.subplots(4, 1, figsize=(8, 8), sharex=True)\n",
    "    item_day_buy_count = user_data[(user_data.behavior_type == 4) & (condition) ][[\"user_id\", \"item_id\", \"date\"]].drop_duplicates()#&(condition)]\n",
    "    item_day_buy_count[\"buy_count\"] = 1\n",
    "    item_day_buy_count[\"date\"]=item_day_buy_count[\"date\"].apply(lambda x:str(x)[5:])\n",
    "    item_day_buy_count=item_day_buy_count[['buy_count','date']].groupby('date').count().sort_values('date')\n",
    "    \n",
    "    f, ax = plt.subplots(figsize=(20, 5))\n",
    "    fig=sns.barplot(x=item_day_buy_count.index,y=item_day_buy_count['buy_count'])\n",
    "    #fig.set_xticklabels(ax.get_xticklabels(), rotation=90)\n",
    "    #sns.barplotp('')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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VjLPpEmTMmbMmCTJqlWrMmDAgIrm+fCHP5yjjjoqS5Ysyfe///2ccMIJFc2TJCtWrMhNN92UU045pV1ZOiLP448/nj/84Q855ZRTMnHixDz77LMVzdPc3JwLLrgg++yzT+6888689tprFc3zTldddVXOO++8iuap1Pl5S3kqdX5OkrPPPjtNTU359a9/nRUrVmT//fcv6/m5Lf8m3tbU1JTFixdn5MiRqaqqyqGHHprHHnssSfLFL34xRxxxRLtydFSe0aNHZ8qUKUmS1atXb9X5uRx5Bg0alJNPPjkvv/xyvvOd7+Skk06qaJ4kWbduXb7xjW9k6tSp7crSEXmeffbZLFu2LKeeempOPvnk/Pa3v61oniT56le/moEDB+bf//3f2/0X5o7I87arr746X/7yl1NVVVWxPP369cuSJUvy5ptv5qmnntqq83M58vz5+bmhoaGQPMnmz+WVOj9vKc+f77O9yp2nnPPncuQp5/y5XN+vcs2fy5GnnPPncuQp5/y5XN+vt23t/LkcebZ2/rwl1WXZy3auuro6u+yyy7u2DRkyJMuWLXvXtq997WtZsmTJu7Zdc801m33uMccck4suuigzZ87MihUrMnny5IrmOe644/LDH/4wp59+embMmJFx48YVlqdv375JkptuuimjRo3KgAED0tDQkP333z9JUlVVlTfffLOieZL8xT4rnSfZ9J+dH//4x5kxY8Y2kefRRx/Nf/3Xf2XnnXeueJ6vfvWrufDCC/PII4+0OUtH5dlnn30yY8aM7L333nn88cdzxRVXZObMmRXLc8cdd6Sqqir/+3//7yxdujRnnHFG7rzzznTq9N5/g+jIfz9PPPFEBg0alMGDB79njo7MU8nz8+byVPr8vHLlysyZM6clW7nPz2975zFvLs8VV1yRgQMHtjzu3bt3y6XpQ4YMaXOGIvIkyVtvvZV//ud/zqWXXrpN5Hn66afz9NNP58ADD6x4nn/+53/OZz/72TQ2Nubll1+uaJ7hw4fnhhtuyNChQ/PSSy9l6tSpOfzwwyuW57HHHsvixYszY8aMvPnmm/m7v/u73HrrrenTp09F8rxt6dKlWblyZYYPH/6eOToyzymnnJJf/OIXueWWW/LCCy/kjDPOqGieY445JjfddFN23nnn3HHHHTn++OMLybOl+Xylzs9bytPaPiuR523lmj+XK0+55s/lyFPO+fPW5in3/Hlr89x1111lnT9vbZ63lWv+vLV5tmb+3GrWsuzlA+JrX/tam597/fXX5x/+4R/yV3/1V/nTn/6Uz3/+8/nXf/3XiuU5+eSTM3To0Nx33315/vnn893vfresWd4rz9y5czN37tz8y7/8S5KktrY269ata/l8Ryym2548RWhvng0bNmT69OmZPn166urqKp4nSU499dQccsghOe+88zJixIiK5fnFL36RvffeOx//+Mfb/Qu1I/Lsueee6datW5JNf1H48xN70XmeffbZfPrTn87AgQMzcODAdO3aNS+99FL22GOPiuR528yZM9u8Dl5H5qn0+fnP81T6/LzrrrvmqquuyvTp0zNv3rwOOT//+TFvLk9TU1MaGxtbHjc0NLR7fZ0i81xyySU56aST8td//dfbRJ4xY8Zk5MiROfroo9v9V/hy5nn44Yfzxhtv5Ljjjntfa36VO09dXV3LJH633XbL66+/nnXr1qV79+4VyfPss8/muOOOy6677pok2WuvvfLcc8/l0EMPrUiet9122205+eST33eGcuW55ZZbcsopp+Soo45Kc3Nzxo0bl3vuuadieUaMGJHdd989c+fOzW9+85vce++9W5WlrXm2pFLn5yJtbZ5yz5/L8fUp5/x5a/J0xPx5a/J0xPx5a/J0xPy5HP9+yjl/3po8HTV/dsteB1m7dm0WLlyYZNPCle25/Lmj7Lvvvnn66adzySWXpKamprBxn3zyyVx99dW57rrr0rVr1yTJsGHDsmDBgiRp918MOiJPJW0uT1NTU6ZPn57Ro0dn9OjRFc/zi1/8IldeeWWSTQvkt+UvuR2ZZ86cOXniiScyefLk3HHHHbnxxhtz//33VyzPpZdemvnz5ydJ7r333vd96Xq58uy9994tv9RXrlyZV1555X3/BbMceZJkzZo1eeGFFzJ06NBCcrSWp5Ln5y19fSpxfi6VShk7dmxWrFiRJHnjjTfSp0+fsp+f23rO7dy5c/r06dNyC9PChQvf95VRHZ3nW9/6Vvr165fTTjut4nkefvjhlsv416xZk9ra2ormuffee7N06dJMnjw5N954Y+644478/Oc/r1ieG264oaUYe+SRR/KhD31oq8qorc2zzz775MUXX0yy6dbGxYsXZ7fddqtYnmTTueC+++4ry3xja/OsXbu25d3InnvuuXbfIlfuPMmm0v7555/Pl770pZYrSTs6z5ZU6vxclK3NU+7589bmKff8eWvzlHv+vLV5yj1/3to85Z4/l+Pnq5zz563N01HzZ1dIdZBzzjknX/nKV/L1r389dXV17X7Xm45w//33p2fPnhk5cmSh437xi19Mjx49cs455yTZ9G5An/zkJ3P99dfn8ssvz+9+97uyXfK3NXkqZXN5li5dmgcffDArVqzI7NmzU1dXl+985zsVyzNu3Lj8/d//fSZOnJiampp2v0tRufPccMMNLZ+/7rrrMnjw4MKKu83lmTZtWqZPn55vf/vbGThwYLtu4emIPOPHj8/FF1+ciRMn5vXXX88FF1zQ8heoSuT55Cc/mblz5+bjH/94IRneK08lz89b+vpU4vxcVVWV6dOn5+yzz05NTU0OOeSQfOxjH0tTU1NZz8/tOedOmTIl06ZNy/Dhw/Pcc8/l61//+laN3RF55s+fn1tuuSUHHnhgTjnllHTt2jU/+clPKpanR48euf/++/PpT386NTU1bV4/rKPyHHvssS2fv/322/Pyyy9nwoQJFctz2GGH5Ytf/GJuueWW9OnTZ6t/l5bj+zV37txMmDAhb7zxRj7zmc+0XC1ViTzJpqsCdtttt7KU4VubZ/jw4bngggsybNiw9O3bNxdeeGFF8yTJokWL8vzzz5dl7rO1c9Byz5+3hzlxe/LMmjWrrPPnrc1T7vnz1uYp9/x5a/OUe/68tXnKPX8ux89XOefPW5uno+bPVaWOuh4e3kNjY2MeeOCB9O/fPx/72McqHQeA/1bJ8/OSJUuycOHCjBw5stCrMeWRRx55trU8m2P+DOxIFFIAAAAAFMoaUgAAAAAUSiEFAAAAQKEUUgAAAAAUSiEFAFAhRx55ZJYtW1bpGAAAhVNIAQBso/70pz/l5ptvrnQMAICyU0gBAGyj/vSnP+WWW26pdAwAgLJTSAEAFKS5uTlf/epXM2LEiEyfPj0bNmxIklx77bU57LDDcsQRR+TOO+9MkkyfPj0nn3xyli9fnkMPPTRnnnlmy35mzZqV0aNHZ8SIEfm3f/u3ihwLAMDWqK50AACAD4p77703ixYtyv33358HH3wwv/rVr7J8+fI88cQT+c1vfpM1a9bkpJNOygknnJDvfOc7WbZsWU4//fQ88MADLft44YUXcvPNN2fWrFnZuHFjTjzxxBx55JH50Ic+VMEjAwBoH4UUAEBBnnrqqRx99NGpqanJ0Ucfnd69e2fQoEH5yle+kn/5l3/Jo48+mpUrV7a6jwULFmTp0qU59thjkyTr16/Pf/7nfyqkAIDtilv2AAAKUiqVUlVV1fK4U6dOeeWVVzJt2rTsuuuu+fa3v92mfYwbNy7z58/P/Pnz89BDD+XAAw/syNgAAGWnkAIAKMjQoUNz3333pbGxMXPmzMnrr7+ep59+OkOHDs1xxx2Xhx566F3P32mnnfLaa69l3bp1WbduXdavX59PfOITmTt3blasWJG1a9dm3LhxWbJkSYWOCADg/VFIAQAU5Nhjj81ee+2VI444IrNmzUr//v1z9NFH54UXXshhhx2WJUuWpEePHvnP//zPJEltbW2mTp2aT33qUxk9enRWrFiRfffdN1/4whcyYcKEHHvssZk0aVI+/OEPV/jIAADap6pUKpUqHQIAAACADw5XSAEAAABQKIUUAAAAAIVSSAEAAABQKIUUAAAAAIVSSAEAAABQKIUUAAAAAIVSSAEAAABQqP8fBZYslqmKi6EAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 1440x360 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 商品全集每天的购买情况\n",
    "erveryday_buy_counts(in_itemlist=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABJ8AAAFECAYAAACJTJ86AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDMuMC4zLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvnQurowAAIABJREFUeJzt3XuclnWBN/7PwDCchrOAHDys+NhmLkK1Vh5CpR7XE6hYiIgWSgfjZyXprqWVYW5Payf1yTTNUlttC0WNfrYefhqgeEjXTbFkafclKDYDCMIAzjBzP3/4OL9sFWac+7pvwPf7L+5r7vv6fu45XPPlM9f1vWpKpVIpAAAAAFCAbtUOAAAAAMCuS/kEAAAAQGGUTwAAAAAURvkEAAAAQGGUTwAAAAAURvkEAAAAQGGUTwAAAAAURvkEAAAAQGGUTwAAAAAURvkEAAAAQGGUTwAAAAAURvkEAAAAQGGUTwAAAAAUprbaAYr00ktNaWsrVTsGAAAAwE6vW7eaDBrUt9Ov26XLp7a2kvIJAAAAoIpcdgcAAABAYZRPAAAAABRG+QQAAABAYZRPAAAAABRG+QQAAABAYZRPAAAAABRG+QQAAABAYZRPAAAAABRG+QQAAABAYWqL3PnGjRvzhS98Ic3NzVm/fn0uueSS/P73v88111yT3XbbLUly6aWXZo899sj8+fNz/fXXp3///rn44ouzzz77ZOvWrTn33HPT0NCQMWPGZO7cuenWTV8GAACwIxs0sG9qe1Tu/25bW9ry0rqmio0HdE5NqVQqFbXzn/70pxk0aFCOOeaY3HffffnFL36RQYMG5dRTT8273vWu9uetWLEin/jEJzJv3rw0NDTkkksuybXXXpurr74669evz/nnn5/vfe972WeffXL88cd3ePw1azamra2wtwcAAMAbGDq0Xxbe2Fix8Q6bMTSNjRsqNh68XXXrVpMhQ+o7/bpCz3yaPn16+7/XrFmTYcOG5aGHHspzzz2XpqamvPvd786FF16YRx99NIcffnj69OmTvffeO42NjWltbc2iRYty0UUXJUmOOOKI3HzzzZ0qnwAAAACorkLLp9esXbs2119/fX74wx/moIMOytFHH50k+fjHP55HHnkkTU1NGTFiRPvze/funbVr16apqSkjR45MkvTr1y8NDQ2dGvettHEAAADsfIYO7VftCMCbKLx8amlpyZw5czJnzpyMGjUqQ4YMSU1NTZLkHe94R/7jP/4j9fX1ryuWmpqaUiqV0rdv32zatCn19fVpaur89bsuuwMAAKi8ahRBLruD4r3Vy+4KXQGutbU1c+bMycSJEzNx4sSsXLkyZ511VlpbW9PU1JRFixblgAMOyLhx4/Lwww8neXWR8oaGhgwePDjjx4/PkiVLkiRLly7NqFGjiowLAAAAQJkVeubTvHnzcv/996exsTELFizIyJEj88EPfjDHHHNMevbsmWnTpmXs2LFJkvr6+lxwwQVZuXJlpkyZktra2kydOjWzZs3KsmXLcscdd+Sqq64qMi4AAAAAZVbo3e46o62tLQ888EBqa2tz2GGHtW9fs2ZNFi9enAMPPDB77bVXp/bpsjsAAIDKc7c72DXtkHe764xu3brliCOO+G/bhwwZkkmTJlUhEQAAAABdVeiaTwAAAAC8vSmfAAAAACiM8gkAAACAwiifAAAAACiM8gkAAACAwiifAAAAACiM8gkAAACAwiifAAAAACiM8gkAAACAwiifAAAAACiM8gkAAACAwiifAAAAACiM8gkAAACAwiifAAAAACiM8gkAAACAwiifAAAAACiM8gkAAACAwiifAAAAACiM8gkAAACAwiifAAAAACiM8gkAAACAwiifAAAAACiM8gkAAACAwiifAAAAACiM8gkAAACAwiifAAAAACiM8gkAAACAwiifAAAAACiM8gkAAACAwiifAAAAACiM8gkAAACAwiifAAAAACiM8gkAAACAwiifAAAAACiM8gkAAACAwiifAAAAACiM8gkAAACAwiifAAAAACiM8gkAAACAwiifAAAAACiM8gkAAACAwiifAAAAACiM8gkAAACAwtQWufONGzfmC1/4Qpqbm7N+/fpccsklGThwYD73uc8lSSZNmpTp06cnSebPn5/rr78+/fv3z8UXX5x99tknW7duzbnnnpuGhoaMGTMmc+fOTbdu+jIAAACAnUWhTc7tt9+eSZMm5Uc/+lE+85nP5IorrsiFF16Ys88+O7fcckvuvvvuvPDCC1mxYkWuvvrq3HzzzZk7d24uvfTSJMl1112X0aNH55ZbbsmwYcOyYMGCIuMCAAAAUGaFnvn02llNSbJmzZoMHTo0d999dyZMmJAkOeSQQ/LII4+kra0thx9+ePr06ZO99947jY2NaW1tzaJFi3LRRRclSY444ojcfPPNOf744zs8/pAh9eV9QwAAAOyQhg7tV+0IwJsotHx6zdq1a3P99dfnhz/8Yf793/+9fXv//v3T0NCQ3r17Z8SIEe3be/funbVr16apqSkjR45MkvTr1y8NDQ2dGnfNmo1payuV500AAADQIdUoghobN1R8THi76dat5i2d6FP4AkotLS2ZM2dO5syZk9133z3Nzc3tH2tqakqpVEp9fX02b97837b37ds3mzZtat8GAAAAwM6l0PKptbU1c+bMycSJEzNx4sR07949AwYMyKpVq5IkTz/9dEaPHp1x48bl4YcfTvLqIuUNDQ0ZPHhwxo8fnyVLliRJli5dmlGjRhUZFwAAAIAyK/Syu3nz5uX+++9PY2NjFixYkJEjR2bmzJmZPXt2xo8fn6eeeipf+9rX0rdv39TX1+eCCy7IypUrM2XKlNTW1mbq1KmZNWtWli1bljvuuCNXXXVVkXEBAAAAKLOaUqlU8UWRli9fnqeffjoTJkzIgAEDkiRtbW154IEHUltbm8MOO6z9uWvWrMnixYtz4IEHZq+99urUONZ8AgAAqLyhQ/tl4Y2NFRvvsBlDrfkEFfBW13yqSvlUKconAACAylM+wa5ph11wHAAAAIC3L+UTAAAAAIVRPgEAAABQGOUTAAAAAIVRPgEAAABQGOUTAAAAAIVRPgEAAABQGOUTAAAAAIVRPgEAAABQGOUTAAAAAIVRPgEAAABQGOUTAAAAAIVRPgEAAABQGOUTAAAAAIVRPgEAAABQGOUTAAAAAIVRPgEAAABQGOUTAAAAAIVRPgEAAABQGOUTAAAAAIVRPgEAAABQGOUTAAAAAIVRPgEAAABQGOUTAAAAAIVRPgEAAABQGOUTAAAAAIVRPgEAAABQGOUTAAAAAIVRPgEAAABQGOUTAAAAAIVRPgEAAABQGOUTAAAAAIVRPgEAAABQGOUTAAAAAIVRPgEAAABQGOUTAAAAAIVRPgEAAABQGOUTAAAAAIV5y+VTqVRKc3NzObMAAAAAsIvpcPn05S9/+XWPN2zYkA9/+MNlDwQAAADArqPD5dN99933usf19fVpbW0teyAAAAAAdh2123vCbbfdlltvvTXr16/P6aef3r79T3/6Uz70oQ8VGg4AAACAndt2y6eDDjooI0eOzDnnnJPZs2e3bx80aFD+x//4H9sdoKWlJWeffXbOOuusvO9978ttt92Wa665JrvttluS5NJLL80ee+yR+fPn5/rrr0///v1z8cUXZ5999snWrVtz7rnnpqGhIWPGjMncuXPTrZs10gEAAAB2Ftstn0aNGpVRo0Zl3333zUEHHdSpnW/dujVnn312Vq1a1b7tsccey2WXXZZ3vetd7dtWrFiRq6++OvPmzUtDQ0MuueSSXHvttbnuuusyevToXH755fne976XBQsW5Pjjj+9UBgAAAACqZ7vl02t++tOf5uWXX87GjRtft33kyJHbfN3cuXPz3e9+t/3xY489lueeey5NTU1597vfnQsvvDCPPvpoDj/88PTp0yd77713Ghsb09ramkWLFuWiiy5KkhxxxBG5+eabO1U+DRlS3+HnAgAAsPMaOrRftSMAb6LD5dOll16am2++OUOHDm3fVlNTk3vvvffNd15bm9133739calUymc/+9kcffTRSZKPf/zjeeSRR9LU1JQRI0a0P693795Zu3Ztmpqa2sutfv36paGhoePvLMmaNRvT1lbq1GsAAADommoUQY2NGyo+JrzddOtW85ZO9Olw+XT77bfnnnvuyfDhwzs9yGtqampy5JFHpqamJknyjne8I//xH/+R+vr61xVLTU1NKZVK6du3bzZt2pT6+vo0NTW95XEBAAAAqI4Or979N3/zN1m9enWXBlu5cmXOOuustLa2pqmpKYsWLcoBBxyQcePG5eGHH06SbNy4MQ0NDRk8eHDGjx+fJUuWJEmWLl2aUaNGdWl8AAAAACqrw2c+jRkzJh/72MdyxBFHZM8992zf/ud3wNue0aNH54Mf/GCOOeaY9OzZM9OmTcvYsWOTJPX19bnggguycuXKTJkyJbW1tZk6dWpmzZqVZcuW5Y477shVV13VibcGAAAAQLXVlEqlDi2KdOWVV77h9s6UT9vS1taWBx54ILW1tTnssMPat69ZsyaLFy/OgQcemL322qtT+7TmEwAAQOUNHdovC29srNh4h80Yas0nqIC3uuZTh8unF1544Q23b+9ud9WkfAIAAKg85RPsmgpfcPy0005LTU1NSqVSVq9enZaWlowcOXKbd7sDAAAA4O2tw+XTfffd1/7vrVu35mc/+1leeumlQkIBAAAAsGvo8N3u/lxtbW2mT5+eJ554otx5AAAAANiFdPjMp79ccPzFF1/M6tWryx4IAAAAgF3HWzrzKUn23Xff/PCHPyxnFgAAAAB2MR0+82n27NlZu3ZtHnvssdTU1OQ973lPBg8eXGQ2AAAAAHZyHT7z6Te/+U0mTZqU22+/PfPnz8/kyZOzaNGiIrMBAAAAsJPr8JlP//iP/5if/OQnGTNmTJJk+fLl+cxnPpO77rqrsHAAAAAA7Nw6fObTli1bMnz48PbHw4YNyyuvvFJIKAAAAAB2DR0+82n69OmZNm1aJk2alJqamtx5552ZMWNGkdkAAAAA2Ml1uHw666yzsv/++2fhwoVJkn/4h3/IBz7wgcKCAQAAALDz63D5lCTjx4/PwQcfnIaGhnTv3r2oTAAAAADsIjq85tMdd9yRQw89NEnyxBNPZPLkyfnVr35VWDAAAAAAdn4dLp++853v5I477kiSHHXUUZk3b16+853vFBYMAAAAgJ1fh8unJBkwYED7v/v27ZutW7eWPRAAAAAAu45O3e1u+vTpOf7445Mkv/zlLzN9+vTCggEAAACw83vLd7s777zzcsghhxQWDAAAAICdX6fudnfwwQfn4IMP/m/bJ0+enNtvv71soQAAAADYNXRqzac3s2bNmnLsBgAAAIBdTFnKJwAAAAB4I8onAAAAAAqjfAIAAACgMMonAAAAAArT4fLp17/+dV555ZU3/NiiRYvKFggAAACAXUeHy6c777wzRx55ZD73uc/lrrvuypYtW4rMBQAAAMAuoLajT7zyyivT3Nychx56KPfdd1+++93v5h3veEf+7u/+Lh/60IfSo0ePInMCAAAAsBPq1JpPPXr0SJ8+fdKzZ89s3bo1DQ0NefDBBzNz5syi8gEAAACwE+vwmU8XXHBBfvOb32TMmDE56qij8s///M8ZNmxYtm7dmkMPPbTIjAAAAADspDpcPo0bNy7nnXdeBg8e/Pod1NZmyZIlZQ8GAAAAwM6vw+XTPvvsk+XLl2f58uWv2/63f/u3ZQ8FAAAAwK6hw+XT5Zdf3v7vP/3pT3nuuefy3ve+NzfddFMhwQAAAADY+XW4fLrxxhtf9/iBBx7IwoULyx4IAAAAgF1Hp+529+cmTJiQZ599tpxZAAAAANjFdOpud39u1apV2bp1a9kDAQAAALDr6HD5dNBBB6W5uTktLS1pa2vLoYcemokTJxaZDQAAAICdXIfLpyFDhuSCCy7IwIED061bt6xZsya9e/fOkUceWWQ+AAAAAHZiHS6fvvrVr+aaa67Ju971riTJ73//+3z6059WPgEAAADwpjq84Hh9fX322GOP9scjR45MXV1dIaEAAAAA2DVs88ynK6+8sv3fe++9d0444YT8z//5P1NTU5N77733dWUUAAAAAPylDl92t99++2W//fZrfzxp0qRCAgEAAACw69hm+TR79uxK5QAAAABgF9ThNZ8AAAAAoLMKL59aWloya9asPPzww0mSVatWZerUqZk6dWp++tOftj9v/vz5mTx5cmbMmJE//vGPSZKtW7fmnHPOySmnnJIvfelLaWtrKzouAAAAAGVUaPm0devWnH322Vm1alX7tgsvvDBnn312brnlltx999154YUXsmLFilx99dW5+eabM3fu3Fx66aVJkuuuuy6jR4/OLbfckmHDhmXBggVFxgUAAACgzAo/82nu3Lk54IADkiStra155plnMmHChNTU1OSQQw7JI488kkcffTSHH354+vTpk7333juNjY1pbW3NokWLcsIJJyRJjjjiiDz44INFxwUAAACgjDp8t7u3tPPa2uy+++7tjzdv3pzhw4e3P+7fv38aGhrSu3fvjBgxon177969s3bt2jQ1NWXkyJFJkn79+qWhoaFT4w8ZUt/FdwAAAMDOYOjQftWOALyJQsunv9S7d+80Nze3P25qakqpVEp9ff3riqXXtvft2zebNm1KfX19mpqaOj3emjUb09ZWKkt2AAAAOqYaRVBj44aKjwlvN9261bylE30qere77t27Z8CAAe1rQD399NMZPXp0xo0b174g+caNG9PQ0JDBgwdn/PjxWbJkSZJk6dKlGTVqVCXjAgAAANBFFT3zKUlmzpyZ2bNnZ/z48Xnqqafyta99LX379k19fX0uuOCCrFy5MlOmTEltbW2mTp2aWbNmZdmyZbnjjjty1VVXVTouAAAAAF1QUyqVKn5d2vLly/P0009nwoQJGTBgQJKkra0tDzzwQGpra3PYYYe1P3fNmjVZvHhxDjzwwOy1116dGsdldwAAAJU3dGi/LLyxsWLjHTZjqMvuoALe6mV3VSmfKkX5BAAAUHnKJ9g17RRrPgEAAADw9qJ8AgAAAKAwyicAAAAACqN8AgAAAKAwyicAAAAACqN8AgAAAKAwyicAAAAACqN8AgAAAKAwyicA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+MV88IMfzIIFC/Kzn/0s9fX1Ofjgg3POOeckScaOHZthw4ZVOi4AAAAAXVDx8mnUqFG55ZZb/tu2q6++Oo899ljOOOOMDB8+PEny93//91myZEk2bNiQI488stJRAQAAAOiiipdPb2bUqFFveFnd+9///iqkAQAAAKAcKr7mEwAAAABvH8onAAAAAAqjfAIAAACgMMonAAAAAAqjfAIAAACgMMonAAAAAAqjfAIAAACgMMonAAAAAAqjfAIAAACgMMonAAAAAAqjfAIAAACgMMonAAAAAAqjfAIAAACgMMonAAAAAAqjfAIAAACgMMonAAAAAAqjfAIAAACgMMonAAAAAAqjfAIAAACgMMonAAAAAAqjfAIAAACgMMonAAAAAAqjfAIAAACgMMonAAAAAAqjfAIAAACgMMonAAAAAAqjfAIAAACgMMonAAAAAAqjfAIAAACgMMonAAAAAAqjfAIAAACgMMonAAAAAAqjfAIAAACgMMonAAAAAAqjfAIAAACgMMonAAAAAAqjfAIAAACgMMonAAAAAAqjfAIAAACgMMonAAAAAAqjfAIAAACgMMonAAAAAAqzw5dP11xzTU488cSceeaZWb16dbXjAAAAANAJtdUOsC2PP/547rvvvvziF7/II488ku9973uZO3duh1/frVvN6x/361vuiJ0a/799vF+/CiX5v+NtJ0/3foMqlORV28tT229YhZK8ant56up3rDy9drA8feqHVyjJq7aXp+8Olqdf3x0rz4AdLM/gPjtWnmG9d6tQkldtN0+fgRVK8qrt5+lfoSSv2n6eHev36bA+O9Z8Y1ifPhVK8qrt5+ldoSSv2n6eXhVK8qrt5Rnap65CSV61/TyV/e/C9vIM7NO9Qkletb089X0q+7f87eXpvYPl6dl3x8rTo37HytO9/471/dy9/471896t/451POzWb8f6fdGtX3V+n24v15upKZVKpXIGKqcrrrgigwYNymmnnZZSqZRJkyblzjvvrHYsAAAAADpoh77srqmpKSNGjEiS1NTUZNOmTVVOBAAAAEBn7NDlU319fTZv3tz+eOPGjVVMAwAAAEBn7dDl07hx47JkyZIkyX/9139l0KDKrkkEAAAAQNfs0Gs+tba2Zvr06TnggAPy29/+NieffHKmT59e7VgAAAAAdNAOXT4lSXNzc+67774MHTo073nPe6odBwAAAIBO2OHLJwAAAAB2Xjv0mk8AAAAA7NyUTwAAAAAURvkEAAAAQGGUT8DrNDU1ZeHChVm6dGm1owBl9Oyzz+aBBx7Ixo0bqx2Ft6i5uTkPPfRQHn/88WpHAeDPmD/D9r3tyqeWlpbMmjUrDz/8cPu2hx56KGeeeWaHXv+Xz/3Tn/6UM888MzNmzMiMGTOyatWqquZZt25dzj333MyYMSNnnHFGli1bVrE8v/rVr/KRj3wkp556ai655JK8tpb9NddckxNPPDFnnnlmVq9eXfU8b7TPauXZuHFjPvWpT2XmzJmZMmVKnnnmmaoXI/qHAAAQGklEQVTmaW5uzllnnZWnnnoql112WX784x9XNc+f+/znP59bb7216nmOOeaY9p/3yy+/vOp5kuTWW2/Nl770pU5lKSLPnXfe2f65mTFjRg488MA0NDRULU81j89vlKeax+f58+fn29/+dp566ql89KMfbS+gynl83t7P8J9btWpVpk6dmqlTp+anP/1p+/ZSqZQLL7yw0z/rReTZunVrzj///Jx++umZMmVKFi1aVNU8SXLOOedkyZIlufHGG3PJJZdUPc9rLrvsslxxxRVVz3P66ae3/7x/+ctfrnqeJFmyZEnOPPPMbb6+Enkeeuih1x2fDzrooDzxxBNVy7Np06bMnj07M2bMyCmnnNLl+U9X8zQ3N+eiiy7KjBkzcuqpp+axxx6rWJ7kjY/l1To+v1mecs6fu5qn3PPnruYp9/y5HF+v15Rj/lyOPOWcP5fr81Ou+XNX85R7/tzVPF2dP29T6W2kpaWldNZZZ5WOPfbY0pIlS0qlUqn0r//6r6XTTz+9dNppp2339W/03P/1v/5X6bbbbiuVSqXSnXfeWfrqV79a1Txf//rXSzfffHOpVCqVFi1a1KH9lCPPli1bSp/+9KdLW7ZsKZVKpdKJJ55YWrp0aem3v/1taerUqaWtW7eWHnzwwdKFF15Y1TxvtM9q5rnppptKCxYsKJVKpdK9995b+vSnP13VPEuXLi3dfffdpVKpVPr9739fmjlzZlXzvGbBggWlsWPHlubNm1fVPKtWrSp98pOf7HCGovOUSqXSc889VzruuONKGzZs2CHyvObJJ58snXvuuVXNU63j85vlqdbxuVQqlX7wgx+UXnnllVKpVCrNnj279MQTT5T1+NyR74k/N3PmzNL9999famtrK51xxhml559/vlQqlUpf+MIXSieddFKnftaLynPPPfeUrrvuulKp9OrxcNKkSVXN88ILL5R+/vOfl0qlUmnDhg2lo446qqp5XvP444+Xxo0bV7r88surmqe5ubl08skndzhD0XlKpVJp3bp1pWOPPfZ1n69q5nnN888/X5oxY0apra2tanluuumm0pVXXlkqlV79Hpo1a1aHshSV58c//nHpsssuK5VKpdIf//jH0hFHHFGxPG90LK/m8fmN8pRz/lyOPOWcP5cjTznnz+XI85pyzJ/Lkaec8+dyfX7KNX8u59erVOr6/Lkceboyf96et92ZT3Pnzs0BBxzQ/vid73xnvv71r3fotW/03CFDhuTZZ5/N5s2b8+STT2afffapap5nn30248aNS5KMHDmy05dXvNU8PXv2zPe///307NkzW7duzYYNGzJkyJAsXrw4xx13XLp37573v//9+bd/+7eq5nmjfVYzz/Tp03PMMcckSdasWZNhw4ZVNc873/nOfOhDH8ry5cvz/e9/PyeccEJV8yRJY2NjrrvuukybNq1TWYrI8+ijj+YPf/hDpk2bllNOOSW/+93vqpqnra0t5513Xvbdd9/Mnz8/L730UlXz/Llvf/vbOffcc6uap1rH5zfLU63jc5J88pOfTGtra371q1+lsbEx+++/f1mPzx35nnhNa2trnnnmmUyYMCE1NTU55JBD8sgjjyRJPvvZz+bwww/vVI6i8kycODEzZ85Mkqxdu7ZLx+dy5BkxYkROPvnkPP/88/nWt76Vk046qap5kmTz5s35+te/nlmzZnUqSxF5fve732XlypU59dRTc/LJJ+c3v/lNVfMkyVe+8pUMHz48//qv/9rpvxwXkec13/3ud/P5z38+NTU1VcszZMiQLF++PJs2bcoTTzzRpeNzOfL85fG5qampInmSNz6WV+v4/GZ5/nKfnVXuPOWcP5cjTznnz+X6epVr/lyOPOWcP5cjTznnz+X6er2mq/PncuTp6vx5W2rLtqedQG1tbXbffffXbRs9enRWrlz5um1f/epXs3z58tdt+973vveGzz366KPzpS99KTfeeGMaGxszY8aMquY57rjj8oMf/CCnn356rr322kyePLlieQYPHpwkue6663LEEUdk2LBhaWpqyv77758kqampyaZNm6qaJ8l/22e18ySv/sfm+uuvz7XXXrtD5Hn44YfzX//1Xxk0aFDV83zlK1/JBRdckIceeqjDWYrKs+++++baa6/NmDFj8uijj+ab3/xmbrzxxqrlue2221JTU5N/+Id/yIoVK3LGGWdk/vz56dZt+39XKPL757HHHsuIESMyatSo7eYoMk81j89vlKfax+fVq1fnnnvuac9W7uPza/78Pb9Rnm9+85sZPnx4++P+/fu3n14+evToDmeoRJ4keeWVV/JP//RPufjii3eIPE8++WSefPLJHHjggVXP80//9E/52Mc+lubm5jz//PNVzTN+/PhcffXVGTt2bJ577rnMmjUrH/zgB6uW55FHHskzzzyTa6+9Nps2bconPvGJ3HTTTRkwYEBV8rxmxYoVWb16dcaPH7/dHEXmmTZtWn7+85/nhhtuyLJly3LGGWdUNc/RRx+d6667LoMGDcptt92W448/viJ53mw+X63j85vl2dY+q5HnNeWaP5crT7nmz+XIU875c1fzlHv+3NU8t99+e1nnz13N85pyzZ+7mqcr8+ft5i3bnnYhX/3qVzv83CuvvDJ///d/n7/+67/Oyy+/nE996lP553/+56rlOfnkkzN27NjcfffdefbZZ/Od73ynrFm2l2fhwoVZuHBhfvSjHyVJ6uvrs3nz5vaPF7HQbWfyVEJn87S0tGTOnDmZM2dORo4cWfU8SXLqqafm4IMPzrnnnptDDz20anl+/vOfZ8yYMXnve9/b6V+eReT5q7/6q/Tq1SvJq38p+MuDeKXz/O53v8tHPvKRDB8+PMOHD09dXV2ee+657L333lXJ85obb7yxw+vWFZmn2sfnv8xT7ePzHnvskW9/+9uZM2dOFi1aVMjx+S/f8xvlaW1tTXNzc/vjpqamTq+HU8k8F110UU466aT8zd/8zQ6R55hjjsmECRNy1FFHdfqv6+XM8+CDD2b9+vU57rjj3tIaXeXOM3LkyPYJ+5577pl169Zl8+bN6d27d1Xy/O53v8txxx2XPfbYI0myzz775KmnnsohhxxSlTyvufnmm3PyySe/5QzlynPDDTdk2rRp+dCHPpS2trZMnjw5d955Z9XyHHroodlrr72ycOHC/PrXv85dd93VpSwdzfNmqnV8rqSu5in3/Lkcn59yzp+7kqeI+XNX8hQxf+5KniLmz+X4/inn/LkreYqcP7/tLrsrt40bN+bpp59O8uqikp05hbko++23X5588slcdNFF6dmzZ8XGffzxx/Pd7343V1xxRerq6pIk48aNy5IlS5Kk038JKCJPNb1RntbW1syZMycTJ07MxIkTq57n5z//eS677LIkry5e35G/0BaZ55577sljjz2WGTNm5Lbbbss111yTe++9t2p5Lr744ixevDhJctddd73l08/LlWfMmDHtv8BXr16dF1988S3/ZbIceZJkw4YNWbZsWcaOHVuRHNvKU83j85t9fqpxfC6VSpk0aVIaGxuTJOvXr8+AAQPKfnzu6DG3e/fuGTBgQPtlSE8//fRbPuOp6Dz/+I//mCFDhuS0006rep4HH3yw/VT8DRs2pL6+vqp57rrrrqxYsSIzZszINddck9tuuy0/+9nPqpbn6quvbi/BHnrooey2225dKp66mmfffffNH//4xySvXp74zDPPZM8996xanuTVY8Hdd99dlvlGV/Ns3Lix/a5gTz31VKcvcyt3nuTVgv7ZZ5/N5z73ufYzRIvO82aqdXyulK7mKff8uat5yj1/7mqecs+fu5qn3PPnruYp9/y5HD9f5Zw/dzVPkfNnZz510dlnn50vfvGL+drXvpaRI0d2+u4zRbj33nvTt2/fTJgwoaLjfvazn02fPn1y9tlnJ3n1rjwf+MAHcuWVV+aSSy7Jb3/727KetvdW81TLG+VZsWJF7r///jQ2NmbBggUZOXJkvvWtb1Utz+TJk3P++efnlFNOSc+ePTt9t6By57n66qvbP37FFVdk1KhRFSvp3ijP7NmzM2fOnHzjG9/I8OHDO3UZThF5pkyZkgsvvDCnnHJK1q1bl/POO6/9L0vVyPOBD3wgCxcuzHvf+96KZNhenmoen9/s81ON43NNTU3mzJmTT37yk+nZs2cOPvjgvOc970lra2tZj8+dOebOnDkzs2fPzvjx4/PUU0/la1/7WpfGLiLP4sWLc8MNN+TAAw/MtGnTUldXl5/85CdVy9OnT5/ce++9+chHPpKePXt2eL2vovIce+yx7R+/9dZb8/zzz2fq1KlVy3PYYYfls5/9bG644YYMGDCgy79Ly/H1WrhwYaZOnZr169fnox/9aPtZUNXIk7z61/4999yzLMV3V/OMHz8+5513XsaNG5fBgwfnggsuqGqeJFm6dGmeffbZssx9ujoHLff8eWeYE3cmz7x588o6f+5qnnLPn7uap9zz567mKff8uat5yj1/LsfPVznnz13NU+T8uaZU1Lnu8H81Nzfnvvvuy9ChQ/Oe97yn2nEA+L+qeXxevnx5nn766UyYMKGiZ1nKI4888uxoed6I+TOwq1E+AQAAAFAYaz4BAAAAUBjlEwAAAACFUT4BAAAAUBjlEwBAwY488sisXLmy2jEAAKpC+QQAUGUvv/xyfvzjH1c7BgBAIZRPAABV9vLLL+eGG26odgwAgEIonwAAyqytrS1f+cpXcuihh2bOnDlpaWlJklx++eU57LDDcvjhh2f+/PlJkjlz5uTkk0/OqlWrcsghh+TMM89s38+8efMyceLEHHroofmXf/mXqrwXAICuqq12AACAXc1dd92VpUuX5t57783999+fX/7yl1m1alUee+yx/PrXv86GDRty0kkn5YQTTsi3vvWtrFy5Mqeffnruu+++9n0sW7YsP/7xjzNv3rxs3bo1J554Yo488sjstttuVXxnAACdp3wCACizJ554IkcddVR69uyZo446Kv3798+IESPyxS9+MT/60Y/y8MMPZ/Xq1dvcx5IlS7JixYoce+yxSZItW7bkP//zP5VPAMBOx2V3AABlViqVUlNT0/64W7duefHFFzN79uzsscce+cY3vtGhfUyePDmLFy/O4sWL88ADD+TAAw8sMjYAQCGUTwAAZTZ27NjcfffdaW5uzj333JN169blySefzNixY3PcccflgQceeN3zBw4cmJdeeimbN2/O5s2bs2XLlrz//e/PwoUL09jYmI0bN2by5MlZvnx5ld4RAMBbp3wCACizY489Nvvss08OP/zwzJs3L0OHDs1RRx2VZcuW5bDDDsvy5cvTp0+f/Od//meSpL6+PrNmzcqHP/zhTJw4MY2Njdlvv/3y6U9/OlOnTs2xxx6b6dOn553vfGeV3xkAQOfVlEqlUrVDAAAAALBrcuYTAAAAAIVRPgEAAABQGOUTAAAAAIVRPgEAAABQGOUTAAAAAIVRPgEAAABQGOUTAAAAAIX5P9WP+s4pxwWIAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 1440x360 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 商品子集每天的购买情况\n",
    "erveryday_buy_counts(in_itemlist=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2.2 查看用户星期购买分布"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, '购买')"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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8eOy2Wy69dZbtXTpUq1du1Yul0sDBw7Uvffeq5KSkku2X7Br1y4tWrRIS5cuVePGjbVv3z69++672rBhg/773/8qKSlJklRRUaHMzEytXr1aoaGhSkhIUEpKin7xi19o3LhxKikpUXh4uDZv3qzFixf76q0BADQwhEwAAAzQrl07HTp0SBaLRRUVFTpy5IhiYmKUl5enfv36SZLKy8t15MgRHTp06JLtknT8+HGNGzdOt912m+exW3v37lWPHj0UFhYmh8Ohm2++WZIUGBio2bNnKzMzU3v27NHp06dVUlKi6Oho9ejRQ5s2bZLD4VBISIh+8pOf+OBdAQA0RJwuCwCAAWJjY7Vp0yZPmPvPf/6js2fPqn///srOzlZ2dra2bNmiO++8U263+5LtknTq1Cn9+c9/VklJifbs2eMZ32Qyeb42m8//+P7666+VkpKipk2b6je/+Y0iIyM9fe6//35t3LhRWVlZ3PwOAHBNETIBADBAu3bttHPnTrVq1Up2u135+fm67777tHXrVhUVFam0tFT9+/fX4cOH1alTp0u2S+fD6q233qrnnntOf/zjHyVJd9xxhz799FOdPXtWOTk5+ve//y1JOnjwoOx2uwYNGqQjR47o22+/9dTTpUsX7du3T3//+98JmQCAa4qQCQCAAcLDwxUZGalWrVqpVatWuu2223TzzTfr17/+tZKSktSvXz+lpKRctv27fvGLX8hqteof//iHOnTooH79+un+++/XzJkzFRMTI0nq3Lmz5+8PPvhA0dHROnr0qKTzj+/q2LGjTCYTp8oCAK4pk9vtdvu6CAAAYCyXy6VFixYpICBATz/9tK/LAQA0INz4BwCA60xlZaWsVutl+/zqV79SVVWVli1bdo2qAgDgPE6XBQDAAOfOndPu3buvatvjx49r0aJF3/v9M2fOqFOnTp7XS5cu1eTJky875t/+9je99957mj17toqLi6+qLgAArgYhEwAAA5SUlGj06NE/2K9jx45KTU1Vamqq4uPjdfToUW3atElVVVWX7L9p0ya5XK5aK5cffPCBHnnkkUv2r6ysVHV1tWfbvLw8z6NQpPOn0V74PgAA3sDpsgAA/EilpaWqqanRDTfc4Gk7ffq0FixY4Hn905/+VKmpqQoLC9PcuXNVWVmpWbNmKSAgQJmZmTp9+rQ++ugjSVJNTY2WLVum8PBw/e53v9P69es94+zYsUPHjh3zjHXq1ClZrVZNmDBBAwYM0IgRI/T1119LOv+Ik1atWumBBx7wbF9VVaWxY8fWagMAwEiETAAAfqSUlBSVl5erqKhI/fv317fffqtRo0bpn//8p8aNG6eTJ09q3bp1Sk1Nlclk0pYtW3To0CFJ0p49exQZGal33nnHM17fvn1lNptVWlqqM2fO6Mknn1RxcbH69eunwMBA/fnPf9aECRP02muvafr06brpppvUtGlTSdKbb74pSVqwYIHKy8v12GOP6U9/+pNefvnla//GAAAaJE6XBQDgR8rMzNSMGTM2GzQzAAAgAElEQVTUuXNnZWZm6t5771VYWJhCQkLUvXt33X333bJYzv9/XZPJJIvFIpvNJkk6duyYnn76aT3zzDOe8aqrqxUQEKDPPvtMDzzwgN599101a9ZMb7/9tnr27KkbbrhBERERKioqUosWLVRaWqrQ0FDP9h9++KE+//xzPf/886qqqtK+ffuu7RsCAGjQWMkEAMAAJ0+eVEREhKTzp8+GhIRcsp/b7VZVVZUnZA4YMECHDx9W27ZtdeDAAd1+++1yuVyyWCxq0aKFkpOTPduGhYUpLS1Nf/zjHzVw4EAdOnRIrVu31hdffKEmTZpIkvLy8vTcc88pPDxcffr0kdvtVkFBgedrp9OpP/3pT7rzzju9/I4AABoqVjIBADDAkSNH1Lp1a0m6aGXxu9xutwoLCz3fr6mp0dq1azVkyBDNmTNHR48e9axk3nzzzQoMDNTq1atVXFysRx99VGvWrNG2bds0cOBAZWVl6e6771ZpaaknZP7kJz9RZmamNm/erI8//lhLly5VmzZt9OGHH+qjjz7Stm3bCJgAAK8iZAIAYIDdu3frjjvukCSdPXv2e1cyXS6Xjhw5olatWqlt27Y6dOiQtm/frhdeeEHHjh3TJ598ourqalksFm3btk2/+93v5HK51KxZM73zzjvavn27Zs+erSNHjujMmTPq2LGjSktLFRgYqOrqalVWVurWW29V48aNv7fWyspKuVwur7wPAABwuiwAAD9SQUGB/v3vf3tWCC93uuxf//pXPfbYY4qNjdUDDzygNm3a6O2339Ztt92mo0eP6r///a+k89duJiQkKCEhQZKUkZEhs9msP/3pT3I6nRoyZIhmzpwps9ksp9OpoKAgbd68WRMnTlSj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S7y1dAAAGmgSl8sCAOBtCQkJOnLkiMLDw1VSUiKLxaJOnTrp3Xff1dq1a1VXV6df//rXuu+++3Tq1KkfHf/Bzp07tXjxYr377rtq3ry5vvrqK61bt065ubn65z//qdTUVEnSuXPntGHDBq1evVqRkZFKTk5Wenq67rnnHk2aNEmnTp1SdHS0Pv/8cy1dutRXf2sAAE0MIRMAAAN07txZX3/9tYKDg3Xu3DkdOXJENptNxcXFGjBggCSpurpaR44c0ddff/2j45JUUlKiSZMm6dZbb/V87daePXuUlJSkqKgo2e123XLLLZKk0NBQzZkzRxs2bNDu3bt15swZnTp1SvHx8UpKStJnn30mu92uiIgI/fznP/fB3xUAQFPE5bIAABggISFBn332mSfM/eMf/1BFRYUGDRqk/Px85efna8uWLfrlL38pt9v9o+OSdPr0aS1YsECnTp3S7t27Pcc3mUye12bz+T++//Wvfyk9PV033HCDXn75ZcXGxnrmPPDAA9q8ebPy8vJ4+B0AoFERMgEAMEDnzp21Y8cOtW3bVlarVaWlpfrVr36lrVu3qqysTJWVlRo0aJAOHz6s7t27/+i4dD6sdurUSc8//7xee+01SdLtt9+uL774QhUVFSosLNTBgwclSQcOHJDVatWQIUN05MgRfffdd556evbsqa+++kofffQRIRMA0KgImQAAGCA6OlqxsbFq27at2rZtq1tvvVW33HKLnnvuOaWmpmrAgAFKT0+/5PiF7rnnHoWEhOgvf/mLunbtqgEDBuiBBx5Qdna2bDabJKlHjx6ev27atEnx8fE6evSopPNf39WtWzeZTCYulQUANCqT2+12+7oIAABgrLq6Oi1evFhBQUF6+umnfV0OAKAJ4cE/AAAEoMcee0y1tbVavny5r0sBADQx7GQCAOAHSkpKlJubq4yMDF+XAgDANWEnEwCARtatWzfP15AUFxfr3XffVX5+vmpray+au3LlSm3YsEFBQUE/eqyzZ8+qpqZGmzZtavAEWgAAfIWQCQBAI4uKitLcuXNVU1Oj2bNnKygoSBs2bNCZM2f03//935Ikl8ul5cuXKz09Xenp6crLy1P37t3VokULFRQUqLi4WI899pjmz5+v06dPEzABAH6DkAkAQCMzmUzasmWLvv76a0nS7t27FRsbqz/96U+eOf379/d8H6YkHTt2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\n",
      "text/plain": [
       "<Figure size 1080x936 with 4 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 用户type操作的星期分布\n",
    "def weekday_buy_counts(type, in_itemlist=False):\n",
    "    if in_itemlist == True:\n",
    "        condition = user_data[\"item_id\"].isin(item_list)\n",
    "    else:\n",
    "        condition = True\n",
    "    weekday_buy_counts = user_data[(user_data[\"behavior_type\"] == type)&(condition)][[\"weekday\"]]\n",
    "    weekday_buy_counts[\"count\"] = 1\n",
    "    weekday_buy_counts[\"weekday\"] = weekday_buy_counts[\"weekday\"].apply(lambda x: x+1)\n",
    "    #print(weekday_buy_counts)\n",
    "    weekday_buy_counts = weekday_buy_counts.groupby(\"weekday\", as_index=False).count().sort_values(by=\"count\", ascending=False).reset_index(drop=True)\n",
    "    return weekday_buy_counts\n",
    "\n",
    "\n",
    "f, (ax1, ax2,ax3,ax4) = plt.subplots(4, 1, figsize=(15, 13), sharex=True)\n",
    "\n",
    "# 商品全集 浏览、加购物车、收藏 和买 的星期分布图\n",
    "data = weekday_buy_counts(1, False)\n",
    "#print(data.head(7))\n",
    "fig = sns.barplot(x=\"weekday\", y=\"count\", data=data,ax=ax1) \n",
    "ax1.set_title('浏览量')\n",
    "\n",
    "data = weekday_buy_counts(2, False)\n",
    "fig = sns.barplot(x=\"weekday\", y=\"count\", data=data,ax=ax2)\n",
    "ax2.set_title('加购物车')\n",
    "\n",
    "data = weekday_buy_counts(3, False)\n",
    "fig = sns.barplot(x=\"weekday\", y=\"count\", data=data,ax=ax3)\n",
    "ax3.set_title('收藏')\n",
    "data = weekday_buy_counts(4, False)\n",
    "fig = sns.barplot(x=\"weekday\", y=\"count\", data=data,ax=ax4)\n",
    "ax4.set_title('购买')\n",
    "\n",
    "\n",
    "\n",
    "上图展示了用户的四种行为在一个星期内每天的分布，浏览、收藏和加入购物车的分布大致相同，而星期五购买量不其他的天数多。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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XXfddd7xrl27qry8XJMnT5bD4ZAkzZkzR1u2bJHdbteAAQMkSS6XS8uWLdP27du1dOlSde7cOZxzAQCt0CYn27/N7XYHfq/J12JiYpSVlXXedVNSUpSdnd1W0wAAIeKn+wAARggJAMAIIQEAGCEkAAAjhAQAYISQAACMEBIAgBFCAgAwQkgAAEYICQDACCEBABghJAAAI4QEAGCEkAAAjBASAIARQgIAMEJIAABGCAkAwAghAQAYISQAACOEBABghJAAAIwQEgCAEUICADBCSAAARggJAMAIIQEAGCEkAAAjhAQAYISQAACMEBIAgBFCAgAwQkgAAEYICQDACCEBABghJAAAI2EPSUNDg8aPH6+ysjJJUmVlpXJzc5Wbm6vly5cHrrd27Vrl5ORo7Nix+uSTTyRJjY2NmjJlikaNGqUnnnhCzc3N4Z4LAAhRWEPS2NioiRMnqrKyMnDsySef1MSJE7Vy5Upt3LhRR44c0RdffKH58+drxYoVKioqUnFxsSRp0aJFysjI0MqVK9WxY0eVlJSEcy4AoBXCfoukqKhIV155pSSpqalJH374oQYNGiSbzab+/ftr586d2rVrlwYPHqz27durS5cuqqqqUlNTk7Zt26YRI0ZIkrKysrRjx45wzwUAhMge1jdut+vyyy8PXD5z5ow6deoUuJyYmCiPx6P4+HilpaUFjsfHx6u6ulo+n0/p6emSpISEBHk8npDef0qK0/AjaDupqQlWTzDCfmux3zrRvF26OPvDGpJvi4+PV319feCyz+eT3++X0+k8JxJfH3c4HDp9+rScTqd8Pl/I7+/4ca+am/2By5H8B15VVdviddgfPi3tj+TtEvut9H362o+JsbXqG/A2fdRWu3btlJSUFDhnUl5eroyMDPXp0ydwMt7r9crj8ahDhw7KzMxUaWmpJKmiokIul6st5wIAgtCmt0gk6b777tOkSZOUmZmpffv2aebMmXI4HHI6nSosLNShQ4c0cuRI2e125ebmavz48dq/f7/Wr1+vF198sa3nAgBa0CYh+cMf/hB4eejQoeratavKy8s1efJkORwOSdKcOXO0ZcsW2e12DRgwQJLkcrm0bNkybd++XUuXLlXnzp3bYi4AIARtfotEktxut9xu9znHYmJilJWVdd51U1JSlJ2d3VbTAAAh4ifbAQBGCAkAwAghAQAYISQAACOEBABghJAAAIwQEgCAEUICADBCSAAARggJAMAIIQEAGCEkAAAjhAQAYISQAACMEBIAgBFCAgAwQkgAAEYICQDACCEBABghJAAAI4QEAGCEkAAAjBASAIARQgIAMEJIAABGCAkAwAghAQAYISQAACOEBABghJAAAIwQEgCAEUICADBCSAAARggJAMAIIQEAGCEkAAAjhAQAYCQqQvLyyy/rtttu0/33369jx45ZPQcA8A12qwe0ZM+ePdq8ebNef/117dy5U3PnzlVRUVFQrxsTYzvv2I+SHRd74kVxoa0XEpuYEuYlrRPs/h85O4R5SesEsz/+R5H5uZeC2590Wfs2WNI6wexPvCwyP//Bfu1fknBpmJe0zjf3B/uxfJvN7/f7L9agcJg3b56Sk5N19913y+/3Kzs7W2+88YbVswAA/xXxd235fD6lpaVJkmw2m06fPm3xIgDAN0V8SJxOp86cORO47PV6LVwDAPi2iA9Jnz59VFpaKkn69NNPlZycbPEiAMA3Rfw5kqamJuXl5enKK6/U7t27dccddygvL8/qWQCA/4r4kEhSfX29Nm/erNTUVPXt29fqOQCAb4iKkAAAIlfEnyMBAEQ2QgIAMEJIEFV8Pp+2bt2qiooKq6cA+C/OkbRCQ0ODJk6cqPz8fF177bVWzwmJ1+vVtGnTVF9fr5MnT2rWrFnq0aOH1bOCUl9fr3vuuUcDBw7Url27NHDgQI0bN87qWa3y8MMPa8CAAbr99tutnhKSYcOGKSXlq6cq+cUvfqEpU6ZYvCh0a9as0e7du/XMM89YPSUkb7zxhl577bXA5b1792rjxo3q2LGjhav+y4+QNDQ0+PPz8/3Dhw/3l5aWWj0nZH/961/9JSUlfr/f73/77bf9EyZMsHhR8CoqKvwbN270+/1+/0cffeS/7777LF7UOiUlJf7evXv7V69ebfWUkFRWVvofeOABq2cY+fzzz/233nqrv7a21uopRv7973/7p06davWMAO7aaoWioiJdeeWVVs9olby8PA0bNkySdPz48cj4biZIPXr00NChQ3XgwAG98MILGjFihNWTQlZVVaVFixZp9OjRVk8J2a5du/Txxx9r9OjRGjVqlD744AOrJ4WkublZjzzyiLp166a1a9eqpqbG6kmt9uyzz2rq1KlWzwggJCGy2+26/PLLrZ5hrLq6WosXL9ZvfvMbq6eErKysLGqf5eDpp59WYWGhHI7IfBbq79KtWzctXLhQK1asUEFBgWbPnm31pJCsW7dONptNjz32mLp376577rlHzc3NVs8K2fvvv6+0tDS5XC6rpwQQkh+ghoYGFRQUqKCgQOnp6VbPCdmYMWM0d+5cPfvss1ZPCcmqVavkdrt19dVXWz2lVbp27Sq32y3pq1uHBw4csHhRaD744APdeeed6tSpk66++mrFxsbq888/t3pWyJYtWxZxt2gj/veR4OJqampSQUGBhgwZoiFDhlg9JySrVq3SZ599pmnTpunEiRNKSkqyelJINm3apFOnTmns2LE6fPiwYmNjlZSUFDV/DjNmzNCtt96q/v3766233oq6u3fdbncgfseOHdPRo0ej7t6F2tpa7d+/X71797Z6yjl41FYrPfbYY7rtttui7lFbr732mmbNmqVevXpJktLT0/XnP//Z4lXBqa+v1/Tp03X06FHFxcXpqaeeCnyHHG3mzZsnl8sVVY/aOnz4sAoKCuTz+dSpUyfNmDEjou5eacnZs2f15JNP6tChQzpx4oQmTJignJwcq2eFZMOGDSotLdXMmTOtnnIOQgIAMMI5EgCAEUICADBCSAAARggJAMAIIQHaQFlZmcaOHdvi9caOHauysrI2WARcPIQEAGCEkAAAjBASoAU33XSTvvzyS02aNEnz5s3TO++8owcffFCrV6/WkCFDdMMNN5zz9N7/3/Gvvfnmmxo1apTOnj0rSXr++ed1ww03KD8/X16vN3C9FStWaPDgwRowYIBefvllSdLWrVvPuYusuLhYCxcuDNeHDgSFp0gBWtCzZ08dPHhQDodDR44ckdPpVPfu3bVkyRKtXr1ajY2Nuu2223TjjTeqpqbmgse/tnPnTi1YsEBLlizRpZdeqr1792rNmjUqKSnRZ599ptzcXElSXV2d1q1bp1dffVWJiYnKyspSXl6err/+ek2fPl01NTVKTk7Wu+++q0WLFln1qQEkERKgRb169dJHH30ku92uuro6HTx4UG63W1988YWGDx8u6aun3zh48KA++uijCx6XpCNHjmj69Onq0aNH4JmL9+zZo0GDBikpKUm9e/fWFVdcIUmKi4vT7NmztW7dOu3evVsnT55UTU2NMjIyNGjQIL3zzjvq3bu3EhIS9OMf/9iCzwrwf7hrC2hBz5499c477wT+wf7Pf/6j2tpa5eTkaPv27dq+fbu2bNmin//85/L7/Rc8LkknTpzQSy+9pJqaGu3evTvw9m02W+DlmJiv/kp+/vnnysvL02WXXaZHH31UaWlpgevcfPPN2rRpkzZv3qxbbrmlLT4FwHciJEALevXqpbKyMnXp0kUul0uVlZX65S9/qa1bt6qqqkper1c5OTk6cOCArrvuugsel74KUvfu3fXggw/qj3/8oyTpqquu0nvvvafa2lqVl5fr448/liRVVFTI5XJp5MiROnjwoI4ePRrY079/f+3du1d///vfCQkiAiEBWpCcnKy0tDR16dJFXbp0UY8ePXTFFVdowoQJys3N1fDhw5WXl/edx7/p+uuvV2xsrP7xj3+ob9++Gj58uG6++WYVFxcHns24X79+gf9u2LBBGRkZ+vTTTyVJsbGxuvbaa2Wz2bhbCxGBZ/8FokxjY6MWLFigdu3aReVvuMT3DyfbgShz5513qqGhQUuXLrV6CiCJWyQAAEOcIwEAGCEkAAAjhAQAYISQAACMEBIAgBFCAgAw8r+gwIXwTyti2AAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 商品子集购买星期分布图\n",
    "data = weekday_buy_counts(4, True)\n",
    "fig = sns.barplot(x=\"weekday\", y=\"count\", data=data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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/1ie5t+vXz+98sor3uwFAAD4gTYfOcjLy1NNTY0qKipks9l0ww03KDY2tiN7AwAAPtDmIwd//etflZmZqS1btmjz5s0aP368SktLO7I3AADgA20+cvDzn/9cr732mvv+BEePHtWPfvQjbd++vcOaAwAAna/NRw7q6+tND11KSEjQ+fPnO6QpAADgO20+cpCdna2srCxlZmbKZrNp27Ztmjx5ckf2BgAAfKDN4SAnJ0f9+vXTvn37dPr0aeXk5GjcuHEd2RsAAPCBNoeDrVu3Kj8/X++88462b9+uxYsXKzAwUBkZGR3ZHwAA6GRtnnPw3HPPaevWrZKku+66Sxs3btRzzz3XYY0BAADfaNdNkKKjo90/R0REqKmpyesNAQAA32rXhMTs7Gz3PIM333xT2dnZHdYYAADwjXZNSBwwYIB27dolSZo3b55uueWWDmsMAAD4RpvDgSSNGDFCI0aM6KheAACAH2hXOPCGbdu26Xe/+5379Xvvvaef/exnevnll3XVVVdJkpYsWaIePXpo8+bNWrNmjaKiopSfn68+ffqoqalJjzzyiJxOp/r27auCggIFBFh+fhQAALhAp4eDcePGuectvPfee3rttddUUVGh5cuXa+DAge73HTt2TKtWrdLGjRvldDq1ePFiFRUVafXq1UpNTdXzzz+vFStWqKSkhPstAADgRZ0eDlp79tln9cwzz2j69On6+OOP5XK5NHToUC1atEjl5eUaNWqUwsPD1atXL1VVVam5uVmlpaV64oknJEnp6elau3Ztu8NBXJzDo77j4yM9Gg90JG9tn97czv2xFj11fi166vxaVvd3PgsHFRUVSkpKUnJysubMmaOxY8dKkqZNm6b9+/fL5XIpKSnJ/f6wsDDV1NTI5XIpOTlZkhQZGSmn09nuz66urvMoIFRV1VoeC3wTT78UWm+fntTyVp2OquWPPXlayx97al3LH3vytJY/9tS6lqd1rO7vfHayvri4WFlZWbLZbBo9erRsNptsNpv69++vI0eOyOFw6Ny5c+73u1wuGYahiIgInT171r0MAAB4l0/CQW1trQ4fPqy0tDQdP35cOTk5am5ulsvlUmlpqQYNGqTBgwdr3759kqS6ujo5nU7FxsZqyJAh2rt3ryTpwIEDSklJ8cUqAADQZfnktMKuXbt04403SpJSU1M1cuRIZWRkKCQkRFlZ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Z/rCOps3b9azzz6rDz74QA8++GC7vji/6t/uoUOHdOedd1qus2nTJo0dO9a9TRw7dsyjnurr63X//ffrf/7nf9pc51K1pk+f7u4pIyNDTz75pKU6xcXFysrK0gMPPKDVq1d71NNbb72l7OxsTZo0SStWrGhTjUt9X1rZzr/qe9fKNn6pWla38UvV8mQ7/1oG3N555x1j4sSJRlNTk7F7925j0aJFlms1NjYaOTk5xt13323s3bvXcp3f/OY3RklJiWEYhvGnP/3J+OEPf2ipzoEDB4z/+q//MgzDMD766CNj+vTplnv6UklJiZGWlmZs3LjR0vgTJ04YDz30kMd9fOnjjz827rnnHqO2ttZrNd99913jkUcesTT2P//zP41NmzYZhmEY27ZtM372s59Z7uOZZ54x1q5daxiGYZSWlhqTJ09u1/hLbY/Tp083/vKXvxgtLS3G1KlTjX/961+Wa/3xj380vve973ncV319vfHDH/7QqK+vNwzDMO677z7jwIEDlnpauXKlcf78ecMwDCMvL8/429/+Znn9DMMwGhoajIkTJxrp6emW6zz++OPGBx980KbxbenpqaeeMn796197pdaXHnroIePQoUPtrlNbW2t85zvfMQzDMJqbm42MjAyjqqrKUk9Op9MYO3asUV9fb7S0tBiTJk1q0/fopb4vrWznl6pjdRu/sNb06dMtbeNf1ZfV7fybcOSglbKyMt1zzz0KDAzUzTffrP/+7//2qF5BQYEGDRrkUY3s7GxlZGRIkqqrq5WQYO0Jidddd53uuOMOHT16VC+++KLuvfdej/qqqqrS6tWrlZWVZblGeXm5Dh06pKysLE2aNEnvv/++5VotLS2aN2+e+vXrp82bN+uzzz6zXKu1Z599Vo888oilsXFxcfr73/+uc+fO6d1331WfPn0s9/H3v/9dgwcPliQlJydb+u2g9fbY3NysgwcP6rbbbpPNZtMtt9yi/fv3W6olfbF9PfPMM+3u6cJaISEhevHFFxUSEqKmpibV1tYqLi7OUk8PPfSQmpub9dZbb6mqqkoDBgyw1NOXfvWrX+mee+5pc41L1amoqNDSpUt1//33a/HixR7V2rlzp37/+9/r/Pnz2rNnj0e1vrRnzx4lJCTommuuaXedkJAQtbS06NixY/rnP/8pwzAUFdX2J4K2rvW///u/6tOnj0JCQmSz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\n",
      "text/plain": [
       "<Figure size 576x576 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 用户type操作的时间段分布\n",
    "def hour_buy_counts(type, in_itemlist=False):\n",
    "    if in_itemlist == True:\n",
    "        condition = user_data[\"item_id\"].isin(item_list)\n",
    "    else:\n",
    "        condition = True\n",
    "    hour_buy_counts = user_data[(user_data[\"behavior_type\"] == type)&(condition)][[\"hour\"]]\n",
    "    hour_buy_counts[\"count\"] = 1\n",
    "    hour_buy_counts = hour_buy_counts.groupby(\"hour\", as_index=False).count().sort_values(by=\"count\", ascending=False).reset_index(drop=True)\n",
    "    return hour_buy_counts\n",
    "\n",
    "f, (ax1, ax2) = plt.subplots(2, 1, figsize=(8, 8), sharex=True)\n",
    "# 商品全集购买时间段分布图\n",
    "data = hour_buy_counts(4,False)\n",
    "fig = sns.barplot(x=\"hour\", y=\"count\", data=data,ax=ax1)\n",
    "\n",
    "# 商品子集购买时间段分布图\n",
    "data = hour_buy_counts(4,True)\n",
    "fig = sns.barplot(x=\"hour\", y=\"count\", data=data,ax=ax2)\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "按小时来观察用户行为的分布，用户一般在每天的19:00—23:00时间段，浏览、收藏、加入购物车的操作数量达到高峰，而购买行为则在下午和晚上够比较多。\n",
    "\n",
    "由于数据只有行为时间的数据，所以必须通过各种行为构造新的特征。通过对数据的探索以及对购买行为的理解，可以在用户各种行为发生的次数和时间间隔等方面构造特征"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
